#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>
#include <unistd.h>

#define FILE_NAME "log.txt"

int main()
{
    umask(0);   // 将权限掩码设置为0,文件的最终权限等于起始权限&(~umask)
    //int fd = open(FILE_NAME, O_WRONLY | O_CREAT | O_APPEND, 0666);
    int fd = open(FILE_NAME, O_RDONLY);
    if(fd < 0)
    {
        perror("open");
        return 1;
    }

    char buffer[1024];
    ssize_t num = read(fd, buffer, sizeof(buffer) - 1); // 减1的原因是给\0留一个位置
    if(num > 0) buffer[num] = '\0';
    printf("%s", buffer);

    //int cnt = 5;
    //char outBuffer[64];
    //while(cnt)
    //{
    //    sprintf(outBuffer, "%s:%d\n", "aaaaa", cnt--);
    //    // C语言规定以\0作为字符串的结尾, 但与文件没有任何的关系, 所以下面的strlen不需要+1
    //    write(fd, outBuffer, strlen(outBuffer));
    //}

    //printf("fd:%d\n", fd);

    close(fd);  // close关闭文件,参数是对应的文件描述符

    return 0;

    // r(读,不存在则出错), w(写,不存在则创建), r+(读写,不存在则出错), w+(读写,不存在则创建)
    // a(append,追加), a+(追加式写入)
    //FILE* fp = fopen(FILE_NAME, "w");   // 没有指明路径,默认在当前路径进行文件操作
    //FILE* fp = fopen(FILE_NAME, "r");   // 没有指明路径,默认在当前路径进行文件操作
    //FILE* fp = fopen(FILE_NAME, "a");   // 没有指明路径,默认在当前路径进行文件操作
    //if(fp == NULL)
    //{
    //    perror("fopen");
    //    return 1;
    //}

    //char buffer[64];
    //while(fgets(buffer, sizeof(buffer) - 1, fp) != NULL)
    //{
    //    buffer[strlen(buffer) - 1] = '\0';  // 清除\n
    //    puts(buffer);
    //}

    //int cnt = 5;
    //while(cnt)
    //{
    //    fprintf(fp,"%s:%d\n", "hello world", cnt--);
    //}

    //return 0;
}
